/**
 * 11. Container With Most Water
 * https://leetcode.com/problems/container-with-most-water/
 */
class ContainerWithMostWater {

    /**
     * 方法：双指针法
     * 逻辑:
     * 使用两个指针分别指向数组的两端，计算当前容器的面积，并逐步向内移动较短的那根指针，
     * 直到两个指针相遇。每次移动指针时，更新最大面积。
     *
     * Args:
     * height (List[int]): 一个整数数组，表示容器的高度。
     *
     * Returns:
     * int: 可以容纳最多水的容器的面积。
     *
     * Time:
     * O(n)，其中 n 是数组的长度。每个指针最多遍历整个数组一次。
     *
     * Space:
     * O(1)，只使用了常数级的额外空间。
     *
     */
    public int maxArea(int[] height) {
        int n = height.length;
        int left = 0, right = n -1;
        int ans = 0;
        while(left < right){
            int area = (right - left) * Math.min(height[left], height[right]);
            ans = Math.max(ans, area);
            if(height[left] < height[right]){
                left++;
            }else{
                right--;
            }
        }
        return ans;
    }
}